#pragma once
#include "WareTypes.h"
#include "IWareUnkown.h"
#include "WareEngineNameSpace.h"

BEGIN_WARE

enum ESceneEntityType
{
	ENTITYNODE_CAMERA = 1,
	//ENTITYNODE_MODEL,
	//ENTITYNODE_BILLBOARD,
	//ENTITYNODE_LIGHT,
	//ENTITYNODE_SKYBOX,
	ENTITYNODE_EFFECT,
	ENTITYNODE_TERRAIN,
	ENTITYNODE_SPRITE,

	ENTITYNODE_COUNT,
};

class IGraphic;
class ISceneNodeCamera;
class ISceneNodeTransform;

class ISceneEntity : public IWareUnkown
{
public:
	virtual ~ISceneEntity() {}

	virtual int32					GetEntityType() = 0;
	virtual uint32					GetID() = 0;

	virtual ISceneNodeTransform*	GetParent() = 0;

	virtual VBOOL					Update( IGraphic* pGraphic, uint32 uCurTime ) = 0;

	virtual VBOOL					Render( IGraphic* pGraphic, uint32 uCurTime ) = 0;

	virtual void					CullVisibleObjects( IGraphic* pGraphic, ISceneNodeCamera* pCamera ) = 0;

	virtual void					SetParent( ISceneNodeTransform* pNode ) = 0;

	virtual void					SetWireFrameMode( VBOOL bWireFrame ) = 0;

	virtual void					SetVisible( VBOOL bVisible ) = 0;
	virtual VBOOL					IsVisible() = 0;
};

END_WARE